class UsuariosController < ApplicationController
  layout 'metronic', only: [:show, :edit]

  #Andes de las siguientes acciones, se crea una variable @usuario que contendrá al usuario especificado en la id de la url
  before_action :set_usuario, only: [:show, :edit, :update, :destroy]

  #skip_before_filter :require_login, only: [:new, :create]
  skip_before_filter :require_login

  # GET /usuarios
  # GET /usuarios.json
  def index
    @usuarios = Usuario.all
  end

  # GET /usuarios/1
  # GET /usuarios/1.json
  def show
  end

  # GET /usuarios/new
  def new
    @usuario = Usuario.new
    render layout: "metronic_login"
  end

  # GET /usuarios/1/edit
  def edit
  end

  # POST /usuarios
  # POST /usuarios.json
  def create
    @usuario = Usuario.new(nombre: params[:nombre], username: params[:username], email: params[:email], password: params[:password], password_confirmation: params[:password_confirmation])

    if @usuario.save
      redirect_to(:registro, notice: 'Usuario registrado con exito.')
    else
      flash.now[:alert] = 'No se pudo registrar el usuario.'
      render :new
    end

    # respond_to do |format|
    #   if @usuario.save
    #     redirect_to(:registro, notice: 'Usuario registrado con exito.')
    #     #format.html { redirect_to :registro, notice: 'Usuario registrado con exito.' }
    #     #format.json { render :show, status: :created, location: @usuario }
    #   else
    #     flash.now[:alert] = 'No se pudo registrar el usuario.'
    #     format.html { render :new }
    #     format.json { render json: @usuario.errors, status: :unprocessable_entity }
    #   end
    # end
  end

  # PATCH/PUT /usuarios/1
  # PATCH/PUT /usuarios/1.json
  def update
    respond_to do |format|
      if params[:usuario][:password].blank? == false
        @usuario.password = params[:usuario][:password]
      else
        @usuario.password = @usuario.password
      end
      if @usuario.update(usuario_params)
        format.html { redirect_to @usuario, notice: 'Usuario was successfully updated.' }
        format.json { render :show, status: :ok, location: @usuario }
      else
        format.html { render :edit }
        format.json { render json: @usuario.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /usuarios/1
  # DELETE /usuarios/1.json
  def destroy
    @usuario.destroy
    respond_to do |format|
      format.html { redirect_to usuarios_url, notice: 'Usuario was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  def seguir
    @usuarioSeguir=Usuario.find_by(username: params[:username])
    if (@usuarioSeguir.id ==  current_user.id)
      redirect_to :noautorizado, notice: 'No se puede seguir a uno mismo'
    elsif (current_user.seguidos.map(&:id).include?(@usuarioSeguir.id))
      redirect_to :noautorizado, notice: 'Ya estas siguiendo a este usuario'
    else
      current_user.seguidos << @usuarioSeguir
      #redirect_to :muro
      session[:return_to] ||= request.referer
      redirect_to session.delete(:return_to)
    end
  end

  def dejarSeguir
    @usuarioDejarSeguir=Usuario.find_by(username: params[:username])
    current_user.seguidos.destroy(@usuarioDejarSeguir)
    #redirect_to :muro
    session[:return_to] ||= request.referer
    redirect_to session.delete(:return_to)
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_usuario
      unless (Usuario.exists?(params[:id]))
        redirect_to :noautorizado
      else
        @usuario = Usuario.find(params[:id])
        if (@usuario.id != current_user.id)
          redirect_to :noautorizado
        end
      end

    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def usuario_params
      params.require(:usuario).permit(:nombre, :username, :email, :password, :password_confirmation)
    end
end
